home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / SOUND / CRYS270.ZIP / CRYSENG.DOC < prev    next >
Encoding:
Text File  |  1995-06-26  |  26.9 KB  |  659 lines

  1.  
  2.  
  3.  
  4.                            CRYSTAL PLAYER Version 2.70
  5.  
  6.                A simple player and sound system for your programs
  7.  
  8.  
  9.                           Written by Sébastien GRANJOUX
  10.                                a.k.a Dilvish / MWB
  11.  
  12.  
  13.  
  14.  
  15.        WARNING:  You  are using this software  at  your own risks! In no
  16.        events  should I be liable for  any damage or loss resulting from
  17.        the  use, misuse or inability to use Crystal Player. There are no
  18.        warranties, except that this program will occupy disk place.
  19.  
  20.  
  21.  
  22.  
  23.  Contents
  24. -------------------------------------------------------------------------------
  25.  
  26.  
  27.        I ................................................. Licence
  28.        II ........................................ Archive content
  29.  
  30.        III .............................................. Features
  31.        IV ......................................... The MOD player
  32.  
  33.        V .............................. Using Crystal Sound System
  34.        VI ......................... Crystal Sound System Functions
  35.        VII ............................ Frequently Asked Questions
  36.  
  37.        VIII ............................................... Thanks
  38.        IX ................................... Contact informations
  39.        X ..................................... Distributions Sites
  40.  
  41.  
  42.  
  43.  
  44.  Chapter I : Licence
  45. -------------------------------------------------------------------------------
  46.  
  47.  
  48.            This  program  enables  you to play  music  files  in the MOD
  49.        format and can be included in your own programs, as long as these
  50.        terms are respected:
  51.  
  52.            You  can  freely  include  Crystal  Player  in  any  freeware
  53.        software,  if you credit me as the author of the sound system. It
  54.        will  be  nice to send me a  message  telling me where I can find
  55.        your program.
  56.            For  any  commercial  use  (including  shareware),  you  must
  57.        contact  me  to  discuss  about further  terms  and  to obtain my
  58.        agreement.  I ask for a full  registered version of your software
  59.        and a small fee based on his price.
  60.  
  61.            This  program  is provided with its  full sources in order to
  62.        enable  you to modify and adapt them so as to fit your particular
  63.        needs.  These modifications should be kept personnal, but I'll be
  64.        glad to receive any improvement to Crystal Player. I just want to
  65.        keep  Crystal  Player under control,  in  order to prevent bugged
  66.        versions from floating around.:-)
  67.  
  68.            You  can freely distribute this program, as long as you don't
  69.        charge  more than 5 US dollars for shipping fees and you keep all
  70.        the original files in the archive.
  71.  
  72.            Contact informations are located at the end of this file.
  73.  
  74.  
  75.  
  76.  
  77.  Chapter II : Archive Content
  78. -------------------------------------------------------------------------------
  79.  
  80.            The  archive  should  be called  CRYSxxxl,  where  xxx is the
  81.        version  (for  instance  240 means  version  2.40).  The letter l
  82.        doesn't exist in public releases, it's only for internal use. For
  83.        example,  B  means that it is a  beta  version, some files may be
  84.        missing, and some (known :-)) bugs could be present.
  85.  
  86.            The usual archive contains these 38 files:
  87.  
  88.        CRYS.EXE      Executable version of the modplayer.
  89.  
  90.        CRYSTAL.LIB   Library for C programs.
  91.        CRYSTAL.H     Include file for the library.
  92.  
  93.        CRYSTAL.TPU   Unit for Turbo Pascal programs.
  94.        CRYSINT.TPU   Low level functions for CRYSTAL unit.
  95.        CRYSTAL.PAS   Source of CRYSTAL unit for Turbo Pascal.
  96.        CRYSINT.PAS   Source of low level functions unit.
  97.  
  98.        CRYSEXP.C     Example that use Crystal Sound System in Turbo C.
  99.        CRYSEXP.PAS   Same as above, but in Turbo Pascal.
  100.  
  101.        CRYSENG.DOC   User's manual, you are reading it now.
  102.        CRYSFR.DOC    Same as above, but in french.
  103.        HISTORY.DOC   Player's history.
  104.        FILE_ID.DIZ   Description for BBSes.
  105.  
  106.  
  107.        C0MULTI.ASM   Starting code for Crystal Player in assembler.
  108.        CRYS.ASM      Source of Crystal MOD player.
  109.        CRYSPLAY.ASM  Routines to get infos from the sound system.
  110.        GMODE3.ASM    Routines for text mode 3 (80x25 16 colors).
  111.  
  112.        MAKEFILE.MAK  Makefile for the C and pascal libraries.
  113.  
  114.        CRYSERR.INC   All possible crystal errors codes.
  115.        CRYSID.INC    All ID for crystal devices.
  116.        CRYS260.ASM   Main source for crystal sound system.
  117.  
  118.        CRYSDEV.INC   Declarations for drivers.
  119.        CRYSDEV.ASM   Common routines for drivers.
  120.        DAC.ASM       DAC driver.
  121.        SPEAKER.ASM   PC speaker driver.
  122.        SNDBLAST.ASM  Sound Blaster (8 bits mono) driver.
  123.        GUS.ASM       GUS driver.
  124.        SNDPRO.ASM    Sound Blaster pro (8 bits stereo) driver.
  125.        ADLIB.ASM     Adlib driver.
  126.  
  127.        CRYSLOAD.INC  Declarations for loading modules.
  128.        CRYSLOAD.ASM  Common routines for loading modules.
  129.        LOADMOD.ASM   Routines for loading MOD.
  130.        FLOADMOD.ASM  Loading MOD from file.
  131.        MLOADMOD.ASM  Loading MOD from memory.
  132.        OLOADMOD.ASM  Loading MOD from overlay.
  133.        CRYSFILE.ASM  Routines for reading files.
  134.        CRYSOVL.ASM   Routines for reading overlay.
  135.        CRYSMEM.ASM   Routines for reading memory.
  136.  
  137.  
  138.  
  139.  
  140.  Chapter III : Features
  141. -------------------------------------------------------------------------------
  142.  
  143.  
  144.            This  program  is  entirely  coded  in  asm  and contains 386
  145.        instructions. It don't works on XT and 286 based PCs. It supports
  146.        the following sound devices:
  147.            - the internal speaker (rather good sound)
  148.            - a DAC (digital to analog convertor) on a parallel port
  149.            - a adlib sound board
  150.            - a Sound Blaster (SB, SB pro and SB16) in mono or stereo but
  151.               only 8 bits
  152.            - a Gravis UltraSound card
  153.  
  154.            It  plays MOD files with 15 or  31 instruments and 4, 6 or 8
  155.        channels,  but  each  sample  should be  smaller  than  62 Ko. It
  156.        recognize  almost all effects except:  E3,E4,E5,E7 and EF. On the
  157.        other  hand, it uses 8 octaves like MOD files tracked with Scream
  158.        Tracker 3.
  159.  
  160.            As  you will notice by reading the history, this program has
  161.        been constantly evolving, so it isn't very easy to understand. It
  162.        contains  a few bugs, and if  something don't works, maybe you've
  163.        just  discovered a new one. ;) In this case, contact me. Usually,
  164.        I  correct  bugs  rather quickly. If  it's  a particular MOD file
  165.        which don't work, I would like you to send it to me (at least the
  166.        name and the place where I cand find it).
  167.  
  168.  
  169.  
  170.  
  171.  Chapter IV : The MOD player
  172. -------------------------------------------------------------------------------
  173.  
  174.  
  175.            The  MOD  player  contained in  the  archive isn't meant to
  176.        concurrence other MOD players, and it has only few options. It is
  177.        provided  so that you can easily see the qualities (and lacks) of
  178.        the  sound routines. It also gives you  an example to use them in
  179.        asm.  It  uses internal informations of  the routines, so you can
  180.        look  how to use them if you really need them. You can code a new
  181.        MOD  player  with these routines but  they doesn't really be made
  182.        for that.
  183.  
  184.            It  can  be  easily  used, and  if  you  run it without any
  185.        parameter,  it will display a help page. You should at least give
  186.        the  name  of  a .MOD file. It  will  then choose itself the best
  187.        sound device that it will find in your environment variables. You
  188.        can  force  a  sound  device, even  if  it  doesn't exist in your
  189.        environment variables, or change the default mixing frequency (19
  190.        kHz) by using these options:
  191.  
  192.             /FRxxxx Mixing frequency in tens of Hertz
  193.  
  194.             /SK       Internal Speaker
  195.             /DCp      DAC on port p (1 to 4)
  196.             /SBp,i,d  Sound Blaster (8 bits mono) on port p (in
  197.                        hexadecimal 220 for instance) with IRQ i and DMA d.
  198.             /GSp      Gravis UltraSound on port p (in hexadecimal)
  199.             /SPp,i,d  Sound Blaster pro (8 bits stereo) on port p (always
  200.                        in hexadecimal) with IRQ i and DMA d.
  201.             /AD       Adlib soundboard
  202.  
  203.            You don't need to provide p, d or i parameters (but leave the
  204.        comma)  the  player  will look  for  those  values in environment
  205.        variables. If they don't exist, it uses default values.
  206.  
  207.            The  number shows after cpu used is  the cpu used only by the
  208.        sound  player  and the main screen  (vu meters, help or samples),
  209.        without updating the other informations. So if you go in the help
  210.        or  sample  screen, you will see the  CPU  used only by the sound
  211.        system.  The  mem used include all  the  player with its specific
  212.        routines  like  vu-meters  not  normally  included  in  the sound
  213.        system.
  214.  
  215.  
  216.  
  217.  
  218.  Chapter V : Using Crystal Sound System
  219. -------------------------------------------------------------------------------
  220.  
  221.  
  222.            The  source  was assembled by  Turbo Assembler in ideal mode,
  223.        and   needs  a  386.  Sound   routines  are  gathered  mainly  in
  224.        CRYS260.ASM.  To  use  them, you need  only  the  library and his
  225.        corresponding include file or the two pascal units.
  226.  
  227.            To  play  music,  you need to  call  several functions in the
  228.        right order. First, you have to decided which drivers you want to
  229.        use  by  calling  the corresponding  USE  functions  (for example
  230.        USESPK for the PC speaker). These functions just force the linker
  231.        to  put the driver's code in your program. The order is which you
  232.        call them, is the order in which DETECTSND will find the devices.
  233.        So  if you think that the GUS is the best sound card, you have to
  234.        call  USEGUS  first  in order to find  a  GUS even if there is an
  235.        other card like Sound Blaster.
  236.  
  237.            You  can  call DETECTSND to  find the soundcards available on
  238.        the  computer.  This  functions  doesn't  use  hardware detection
  239.        methods   to   avoid  compatibilities   problems,   but  use  the
  240.        environment  variables. So, if you don't have, for example, a SET
  241.        BLASTER  in  your AUTOEXEC.BAT, the  funtions  won't find a sound
  242.        blaster.  For the DAC you can use DAC=port, with a number between
  243.        1  and  4 for port, corresponding  to the parallel port where the
  244.        DAC  is plugged. There is no environment variables for pc speaker
  245.        or  adlib  so  there are  always  detected.  This functions isn't
  246.        mandatory, if you already know the sound card you wants.
  247.  
  248.            Now,  you  have to load the module  you want to play. For all
  249.        that, you can use FLOADMOD,MLOADMOD ou OLOADMOD if the modules is
  250.        stored  respectively  in a file, a  zone  of memory or an overlay
  251.        (just  append at the end of  the programm). As, others functions,
  252.        if  there is a problem during the execution, for example there is
  253.        no file of the corresponding name, the carry flag will be set and
  254.        they will return an error code.
  255.  
  256.            After  loading the module, you have to set up the player with
  257.        SETMOD for the selected sound card, which must be in the ones you
  258.        have  choosen  at the beginning with  the  USE functions. You can
  259.        notice  that  this  function  makes  an  hardware  check  for the
  260.        soundcard  to  see  if it is  really  there.  You can't call this
  261.        function  before LOADMOD because, some  sound card (the GUS) have
  262.        to load the sample in their memory with this function.
  263.  
  264.            Now, you can start the music with STARTMOD, at the end of the
  265.        routine  the  player  starts in background.  If  you  want a good
  266.        quality  music,  avoid  to  stop  interrupts  (by  calling  other
  267.        interrupt  or  using  assembler  instruction  like  cli).  The PC
  268.        speaker is specially sensitive to this.
  269.  
  270.            So,  the music is playing, and you can now use other function
  271.        in no particular order to set or read some of the player variable
  272.        like  volume  with  CHANGEVOL. But  there  is  still an important
  273.        function,  that  you  had to call at  50  Hz,  at least, in older
  274.        version  of the sound system. It's MAKEMOD, this function compute
  275.        the  music for 1/50s, or more exactly for a frame that is defined
  276.        in  BPM in the module. Now  this function is called automatically
  277.        if the sound buffer is almost void, but you can always call it to
  278.        fill  the  buffer.  This  can  be  interresting  to  get  rid  of
  279.        relatively  long  interrupts  during  a  critical  part  of  your
  280.        programm without masking interrupts and stop the music.
  281.  
  282.            When  you  want  to  stop the  music,  you  just have to call
  283.        STOPMOD.  Then  you can call another  time  STARTMOD, if you just
  284.        want a pause or SETMOD if you want to change the soundcard or the
  285.        mixing  frequency. If you want to  load another module or want to
  286.        terminate  your program, don't forget to call UNLOADMOD before to
  287.        release the memory reserved by LOADMOD.
  288.  
  289.  
  290.  
  291.  
  292.  Chapter VI : Crystal Sound System Functions
  293. -------------------------------------------------------------------------------
  294.  
  295.  
  296.            Every  function  uses the pascal  format  to take parameters.
  297.        They  doesn't  modify SI, DI , BP, SP,  DS, CS, SS so you can use
  298.        them  directly  in  C program.  Other  registers  may be altered.
  299.        Here's  a detailed description of  each function. The error codes
  300.        ,returning  by  these functions, is a  16 bits number ,defined in
  301.        CRYSERR.INC,  that  is null if no  error  occured. If there is an
  302.        error the carry will be set too else it will be clear (useful for
  303.        assembleur programmer).
  304.  
  305.  
  306.        USEGUS,USESPK,USEDAC,USEADL,USESB,USESP,USENUL
  307.  
  308.            Function  Add the corresponding driver to your program.
  309.  
  310.            Input     None
  311.            Output    An error code
  312.  
  313.            Remark    These  functions are used by  the linker to add the
  314.                      driver in your programm. You must call them, if you
  315.                      want to be to able to use the corresponding driver.
  316.                      The  order  in which you call  them is the order in
  317.                      which DETECTSND find the soundcards.
  318.  
  319.  
  320.        DETECTSND
  321.  
  322.            Function  Detect   installed  sound  device  by  looking  for
  323.                      environment variables.
  324.  
  325.            Input      A far word pointeur for the sound device ID
  326.                       A far word pointeur for the port address
  327.                       A far byte pointeur for the IRQ
  328.                       A far byte pointeur for DMA channel
  329.            Output     An error code
  330.  
  331.            Remark    If  you give initialize some on these variable with
  332.                      a  non null value, this  routine won't change them.
  333.                      So you can detect the configuration of a particular
  334.                      sound  card, just by initialize the sound device ID
  335.                      with  its value. If you give  0 as the sound device
  336.                      number,  the routine will search for all soundcards
  337.                      in  the  order  of their  declaration  with the USE
  338.                      functions.  To detect a DAC,  put SET DAC=p (p=1 to
  339.                      4)  in  your autoexec.bat.  Some sound card haven't
  340.                      any environment variable like, adlib, pc speaker or
  341.                      no device, and are always detected.
  342.  
  343.  
  344.  
  345.        FLOADMOD
  346.  
  347.            Function  Load a MOD from a file.
  348.  
  349.            Input     A far pointer a string, finished by a nul character
  350.            Output    An error code
  351.  
  352.            Remark    This  function  takes itself  the memory needed for
  353.                      the  module. Each sample use  a few kilo bytes more
  354.                      than  in the file. Each sample can't be bigger than
  355.                      62Ko.
  356.  
  357.  
  358.        MLOADMOD
  359.  
  360.            Function  Load a MOD already in memory.
  361.  
  362.            Input     A far pointer on the module in memory
  363.            Output    An error code
  364.  
  365.            Remark    This  function  exactly  do  the  same  thing  that
  366.                      FLOADMOD,  except  that it  doesn't load the module
  367.                      from  a file. Notice that  the module will be twice
  368.                      in  memory, and that you  can dispose of the memory
  369.                      previously used by the module.
  370.  
  371.  
  372.        OLOADMOD
  373.  
  374.            Function  Load a MOD from a overlay.
  375.  
  376.            Input     The starting position of the module in your program
  377.                      file on 32 bits
  378.            Output    An error code
  379.  
  380.            Remark    This  function acts like FLOADMOD  and has the same
  381.                      restriction.  It  ask only for  the position of the
  382.                      module and search itself the name of the program.
  383.  
  384.  
  385.        UNLOADMOD
  386.  
  387.            Function  Free the memory used by the module.
  388.  
  389.            Input     None
  390.            Output    None
  391.  
  392.            Remark    This  function  should be called  at the end of the
  393.                      program or before loading another module to release
  394.                      the memory used by the module.
  395.  
  396.  
  397.  
  398.        SETMOD
  399.  
  400.            Function  Define sound device and frequency.
  401.  
  402.            Input     The mixing frequency in tens of Hertz on 16 bits
  403.                      Sound device ID on 16 bits
  404.                      Port adress on 16 bits
  405.                      IRQ on 8 bits
  406.                      DMA on 8 bits
  407.            Output    An error code
  408.  
  409.            Remark    Number for sound devices are:
  410.                        1 = Internal PC speaker
  411.                        2 = DAC
  412.                        3 = Sound Blaster (mono 8 bits)
  413.                        4 = Gravis Ultrasound
  414.                        5 = Sound Blaster pro (stereo 8 bits)
  415.                        6 = Adlib
  416.                        7 = No sound
  417.                      For  the  DAC, the port  isn't  an address, but the
  418.                      number  of  the  parallel  port  where  the  DAC is
  419.                      plugged  (1 to 4). If you  give 0 as the frequency,
  420.                      Crystal  Player  uses  a default  value  of 19 kHz.
  421.                      Every  card  doesn't  use  all  parameters: On GUS,
  422.                      modules  are  always played at  44  kHz, the IRQ is
  423.                      only  needed for Sound  Blaster card. This is  this
  424.                      function that load samples in GUS memory.
  425.  
  426.  
  427.        STARTMOD
  428.  
  429.            Function  Start the music.
  430.  
  431.            Input     None
  432.            Output    None
  433.  
  434.            Remark    The   timer   interrupt  is   chained  to  the  old
  435.                      interrupt,  that is called 18.2 time by second even
  436.                      with  DAC  or  PC  speaker  that  use  heavily this
  437.                      interrupt. Try not to call any function which masks
  438.                      interrupts as it would decrease music quality.
  439.  
  440.  
  441.        MAKEMOD
  442.  
  443.            Function  Calculate a frame (1/50s) of music.
  444.  
  445.            Input     None
  446.            Output    None
  447.  
  448.            Remark    This function is called automatically by the player
  449.                      under  interrupt,  but  you can  call  it, to avoid
  450.                      rather long random interrupts during your programm.
  451.                      Normaly you have to call it à 50Hz but you can call
  452.                      it  more  or less often,  it  will still work. This
  453.                      funtion  use  a buffer of  4Ko,  so, for example at
  454.                      22Khz  mono,  you can  precalculate  about 180ms of
  455.                      music (9 frames).
  456.  
  457.  
  458.        STOPMOD
  459.  
  460.            Function  Stop music.
  461.  
  462.            Input     None
  463.            Output    None
  464.  
  465.            Remark    This  function  allow you  to definitively stop the
  466.                      music  or  only pause it  and  continue it later by
  467.                      calling  STARTMOD again. There may be some problems
  468.                      with Sound Blaster cards.
  469.  
  470.  
  471.  
  472.        CHANGEVOL
  473.  
  474.            Function  Set master volume.
  475.  
  476.            Input     A byte for the volume (0 to 63)
  477.            Output    None
  478.  
  479.            Remark
  480.                      Just  change the volume for all voices but it's not
  481.                      instantaneous,  there is a delay of about 250ms. It
  482.                      depends mainly on the mixing frequency.
  483.  
  484.  
  485.        SETMODPOS
  486.  
  487.            Function  Set the position of music.
  488.  
  489.            Input     A word equal to line+position*64
  490.            Output    None
  491.  
  492.            Remark    Change  the  position of the  music even while it's
  493.                      playing. Like with CHANGEVOL, the effective jump is
  494.                      delayed  by the internal buffer of about 250ms. The
  495.                      position is the sequence begin at 0.
  496.  
  497.  
  498.        GETMODPOS
  499.  
  500.            Function  Read the position of music.
  501.  
  502.            Input     None
  503.            Output    A word equal to line+position*64
  504.  
  505.            Remark    Read  the  position  of  musique  even  while  it's
  506.                      playing.  But in fact, it's  read the position with
  507.                      about 250ms in advance, because of the buffer.
  508.  
  509.  
  510.  
  511.  
  512.  Chapter VII : Frequently Asked Questions
  513. -------------------------------------------------------------------------------
  514.  
  515.  
  516.            How  can  I use variables from  the  mod playing routines, to
  517.        display the current pattern for instance?
  518.  
  519.        >>> In order to keep Crystal Player easy to understand, I've only
  520.        documented  the mod playing functions,  and the Turbo Pascal unit
  521.        only contains those functions. But there are other public symbols
  522.        and  I use them in the mod  player. You can look into CRYS260.ASM
  523.        for the symbols, and in CRYSPLAY.ASM to see how to use them.
  524.  
  525.  
  526.            Why is the player so slow with EMM386 or QEMM386?
  527.  
  528.        >>>  Extended memory managers put the  system in virtual 86 mode,
  529.        the  system isn't in real mode  anymore, and interrupts last much
  530.        longer.  Since the player uses many  of them, those managers slow
  531.        it.
  532.  
  533.  
  534.            How can I know that a function went right?
  535.  
  536.        >>>  Functions  send back 0 and  the carry is clear if everything
  537.        went  right.  Else,  they  send  back  an  error  code  (look  in
  538.        CRYSERR.INC).
  539.  
  540.  
  541.            Why  does the function FLOADMOD or  MLOADMOD return an error code
  542.        with the right file name ?
  543.  
  544.        >>>  Probably  because the function  can't  find enough memory to
  545.        load  the  samples.  Normaly a  program  takes  all the available
  546.        memory  when  the  DOS load it.  To  correct  this, use the SMALL
  547.        memory  model  in  a  C program, use  the  $M  option in a pascal
  548.        program  or give back all the unused memory with the DOS function
  549.        4Ah in a asm program.
  550.  
  551.  
  552.            How can I use a overlay module ?
  553.  
  554.        >>>  First,you have to compile and link your program with passing
  555.        a  dummy value to OLOADMOD. You can compress your program now and
  556.        then  you  take  note of your  program's  length. You replace the
  557.        dummy  value  by the program's length  and  you compile, link and
  558.        possibly  compress  your program again.The  program must have the
  559.        same  length than before. Now, you have just to add the module at
  560.        the  end  of  your  program with  using,  for  example,  "copy /b
  561.        program+module".
  562.  
  563.  
  564.           Why the music is fainter than with other players ?
  565.  
  566.        >>> First,  I don't make any  sort of amplification. Moreover, for
  567.        sound  blaster users, I don't change  the master volume, thus you
  568.        can  change  it  yourself. To change  it  you have to use set-sbp
  569.        program.  For example, if you want  the loudest music use set-sbp
  570.        /voc:15,15 /m:15,15.
  571.  
  572.  
  573.            How to compile the pascal unit with Turbo Pascal 7 ?
  574.  
  575.        >>> Normaly, there no problem but as I only have the Turbo Pascal
  576.        6, I release only a TP6 unit.
  577.  
  578.  
  579.  
  580.  
  581.  Chapter VIII : Thanks
  582. -------------------------------------------------------------------------------
  583.  
  584.  
  585.            I  want  to thank these persons  who  have played and continue to
  586.        play a part in this program:
  587.  
  588.            William Petiot for GUS tests and adjustements.
  589.            Tchi Southivong for numerous tests with GUS and SB.
  590.            Stéphane Gigandet for numerous SB tests.
  591.            Vincent Negrier for SoundBlaster tests.
  592.            Stéphane Scherrer for documents on Sound Blaster.
  593.            Francis Gastellu for the name of the player.
  594.            Mark J.Cox for showing me that mods could be played on PC.
  595.            CASCADA for GUSPLAY.
  596.            VLA for informations on DMA transfert.
  597.            Bisounours / Nuage for the translation of this file.
  598.  
  599.  
  600.  
  601.  
  602.  Chapter IX : Contact informations
  603. -------------------------------------------------------------------------------
  604.  
  605.  
  606.            If  you want to include my  routines in a commercial program,
  607.        if   you   have  found  bug(s),   if  you  want  some  particular
  608.        improvement(s), if you need more informations or have any remark,
  609.        you can contact me by using the following ways:
  610.  
  611.            Send Mail to:
  612.  
  613.                M. Sébastien Granjoux
  614.                17 rue de Paris
  615.                         92190 Meudon
  616.                               France
  617.  
  618.            You  can  also leave me a message  on  one of this French BBS
  619.        (near Paris):
  620.  
  621.            Dune BBS             +33-1-47-02-25-97  24.0 Bps
  622.            Deadline BBS         +33-1-46-48-67-63  14.4 Bps
  623.                                 +33-1-46-44-57-96  28.8 Bps
  624.            Eden BBS             +33-1-34-15-39-67  28.8 Bps
  625.                                 +33-1-34-13-95-28  28.8 Bps
  626.  
  627.            Or by email. (I'm absolutely not sure that it works!)
  628.  
  629.            Sebastien.Granjoux@nuxes.frmug.fr.net
  630.            sebastien.granjoux#barnabo@sparkhq.fdn.org
  631.  
  632.            Don't  hesitate  to contact me, I  will  always pleased to answer
  633.        you,  and  it will give me the  feeling that all this work wasn't
  634.        worth nothing.
  635.  
  636.  
  637.  Chapter X : Distribution Sites
  638. -------------------------------------------------------------------------------
  639.  
  640.  
  641.            Crystal  Player latest version will always be availlable at these
  642.        BBSes, free for download:
  643.  
  644.            - France:
  645.  
  646.                Dune BBS           +33-1-47-02-25-97  24.0 Bps
  647.                Deadline BBS       +33-1-46-48-67-63  14.4 Bps
  648.                                   +33-1-46-44-57-96  28.8 Bps
  649.                Eden BBS           +33-1-34-15-39-67  28.8 Bps
  650.                                   +33-1-34-13-95-28  28.8 Bps
  651.  
  652.            More  sites  wanted!!! If you are  a sysop and want to distribute
  653.        Crystal Player, call one of those boards.
  654.  
  655.  
  656.  
  657.                                          Sébastien Granjoux,   06/05/95
  658.  
  659.